Spring Boot Uygulaması Docker ile Nasıl Çalıştırılır? Adım Adım Rehber
Spring Boot uygulamasını Docker ile çalıştırmak, projeyi farklı ortamlarda daha kolay dağıtmanın ve tutarlı şekilde çalıştırmanın en pratik yollarından biridir.
Bu rehberde Spring Boot uygulamasını Docker ile uyumlu hale getirip çalıştırmayı adım adım ele alacağız. Dockerfile oluşturma, image build etme ve container üzerinden uygulamayı çalıştırma süreçlerini sade bir dille inceleyeceğiz.
Spring Boot Uygulamasını Docker ile Çalıştırmak Neden Önemli?
Spring Boot projeleri geliştirme ortamında sorunsuz çalışsa bile farklı sunuculara taşındığında ortam farklarından dolayı sorun çıkarabilir. Docker bu problemi azaltır çünkü uygulamayı bağımlılıklarıyla birlikte paketler ve her ortamda benzer şekilde çalıştırılmasını sağlar.
Bu yaklaşım özellikle geliştirme, test ve production süreçlerinde büyük kolaylık sağlar. Aynı image farklı makinelerde çalıştırılabildiği için dağıtım süreci daha hızlı ve daha güvenilir hale gelir.
Spring Boot Projesi Oluşturma
İlk adım olarak bir Spring Boot projesi oluşturmamız gerekir. Bunun için Spring Initializr kullanabiliriz.
Proje oluştururken temel bağımlılık olarak Spring Web eklemek yeterlidir. Böylece örnek bir endpoint yazarak uygulamayı hızlıca test edebiliriz.
Dockerfile Oluşturma
Proje oluşturulduktan sonra uygulamanın bulunduğu dizinde bir Dockerfile oluşturmalıyız. Docker, image üretirken bu dosyadaki talimatları okuyarak çalışır.
Dosya adının tam olarak Dockerfile olması gerekir. Bu dosya içine uygulamanın hangi temel image üzerinden çalışacağı, hangi dosyanın container içine kopyalanacağı ve hangi komutun çalıştırılacağı yazılır.
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
Bu örnekte temel bir Java image kullanılıyor, uygulama dosyası container içine kopyalanıyor ve uygulama 8080 portu üzerinden ayağa kaldırılıyor.
Örnek Controller Yazma
Uygulamanın gerçekten çalıştığını görmek için basit bir controller yazabiliriz. Böylece container ayağa kalktıktan sonra tarayıcı üzerinden endpoint’e erişip sonucu test edebiliriz.
@RestController
public class HelloController {
@GetMapping("/")
public String index() {
return "Spring Boot Docker demo çalışıyor";
}
}
Bu endpoint uygulama başarıyla çalıştığında tarayıcıda düz metin olarak cevap dönecektir.
Docker Image Oluşturma
Dockerfile hazır olduktan sonra proje dizininde terminal açarak image oluşturabiliriz.
docker build -t dockerdemo -f Dockerfile .
Bu komutta:
- docker build image oluşturur.
- -t dockerdemo image adına etiket verir.
- -f Dockerfile kullanılacak dosyayı belirtir.
- . mevcut dizini build context olarak kullanır.
Build işlemi tamamlandıktan sonra image’ın oluşup oluşmadığını kontrol etmek için aşağıdaki komut çalıştırılır:
docker images
Bu komut sistemde bulunan tüm Docker image’larını listeler. Eğer işlem başarılıysa listede dockerdemo image’ını görebilirsiniz.
Docker Container Çalıştırma
Image oluşturulduktan sonra artık uygulamayı container olarak çalıştırabiliriz.
docker run -p 9990:8080 dockerdemo
Bu komutta host makinedeki 9990 portu ile container içindeki 8080 portu eşleştirilir. Yani uygulama container içinde 8080 portunda çalışırken siz tarayıcıdan 9990 portu üzerinden erişirsiniz.
Tarayıcıya localhost:9990 yazarak uygulamanın ayağa kalktığını test edebilirsiniz.
Sık Yapılan Hatalar
- Dockerfile dosya adını yanlış yazmak
- Jar dosyasını build etmeden Docker image oluşturmaya çalışmak
- Yanlış port eşleştirmesi yapmak
- Container içindeki jar yolunu yanlış belirtmek
- Proje dizinini yanlış konumdan build etmek
Özellikle en sık karşılaşılan hata, Spring Boot projesini önce package etmeden Docker build komutunu çalıştırmaktır. Jar dosyası oluşmadan COPY adımı doğru şekilde çalışmaz.
Daha Temiz ve Güvenli Kullanım İçin Öneriler
Temel örnekler öğrenmek için idealdir ancak gerçek projelerde Dockerfile yapısını biraz daha iyileştirmek faydalı olur.
- Daha küçük base image kullanarak image boyutunu azaltın.
- Multi-stage build ile gereksiz dosyaları final image içine almayın.
- Production ortamında environment variable kullanımını tercih edin.
- Uygulama loglarını container dışından izlenebilir hale getirin.
Sık Sorulan Sorular
Spring Boot uygulamasını Docker ile neden çalıştırmalıyım?
Çünkü Docker, uygulamayı bağımlılıklarıyla birlikte paketler ve farklı ortamlarda daha tutarlı çalışmasını sağlar.
Dockerfile zorunlu mu?
Evet. Klasik Docker image üretim sürecinde hangi adımların uygulanacağını belirtmek için Dockerfile kullanılır.
docker build -t ne işe yarar?
Build edilen image’a bir isim ve etiket vermek için kullanılır.
docker run -p 9990:8080 ne anlama gelir?
Host makinedeki 9990 portunu container içindeki 8080 portuna yönlendirir.
Sonuç
Bu rehberde bir Spring Boot uygulamasını Docker ile nasıl çalıştıracağımızı adım adım inceledik. Önce projeyi oluşturduk, sonra Dockerfile hazırladık, image build ettik ve son olarak container üzerinden uygulamayı ayağa kaldırdık.
Eğer Spring Boot projelerinizi daha taşınabilir, daha kolay dağıtılabilir ve daha düzenli hale getirmek istiyorsanız Docker kullanmak güçlü bir adımdır.